package com.offics.loan.domain.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.offics.loan.domain.entity.LoanProduct;

import java.util.List;
import java.util.Optional;

/**
 * 贷款产品仓储接口
 */
public interface LoanProductRepository {

    /**
     * 根据ID查询贷款产品
     *
     * @param id 产品ID
     * @return 贷款产品信息
     */
    Optional<LoanProduct> findById(Long id);

    /**
     * 根据名称查询贷款产品
     *
     * @param name 产品名称
     * @return 贷款产品信息
     */
    Optional<LoanProduct> findByName(String name);

    /**
     * 查询所有启用的贷款产品
     *
     * @return 贷款产品列表
     */
    List<LoanProduct> findAllEnabled();

    /**
     * 分页查询贷款产品
     *
     * @param page 分页参数
     * @param name 产品名称
     * @param status 状态
     * @return 分页结果
     */
    IPage<LoanProduct> findPage(IPage<LoanProduct> page, String name, Integer status);

    /**
     * 保存贷款产品
     *
     * @param loanProduct 贷款产品信息
     * @return 保存后的贷款产品信息
     */
    boolean save(LoanProduct loanProduct);

    /**
     * 保存贷款产品并返回保存后的产品
     *
     * @param loanProduct 贷款产品信息
     * @return 保存后的贷款产品信息
     */
    LoanProduct saveAndReturn(LoanProduct loanProduct);

    /**
     * 更新贷款产品
     *
     * @param loanProduct 贷款产品信息
     * @return 是否成功
     */
    boolean update(LoanProduct loanProduct);

    /**
     * 根据ID删除贷款产品
     *
     * @param id 产品ID
     * @return 是否成功
     */
    boolean deleteById(Long id);

    /**
     * 检查产品名称是否存在
     *
     * @param name 产品名称
     * @return 是否存在
     */
    boolean existsByName(String name);
}
